#ifndef __DAG_MTX_CLASS_HEADER_DOT_H__
#define __DAG_MTX_CLASS_HEADER_DOT_H__
#include <map>
#include <string>
#include <vector>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#include <Types.h>
#include <LoadMatrix.h>
#include <Statistics.h>
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template< typename node_t > class DagMtx {

public:
   U32                           numDags;
   const std::string             name;
   const U64                     deg;
   bool                          pathCompacted;
   std::vector< node_t >         nodes;
   std::vector< U32 >            dagHgts;
   std::vector< U32 >            dagRootIdxs;
   std::vector< U32 >            dagNodeCounts;
   std::vector< std::string >    dagNames;
   std::vector< std::string >    arrNames;
   std::vector< DagStatistics >  dagStats;
   std::vector< ArrStatistics >  arrStats;
   MatrixProperties              meta;
   
   DagMtx( const std::string & _name, const U64 _deg ) : name( _name ), deg( _deg ) {
      numDags = 0;
      pathCompacted = false;
   }
   // U64  TotalArrBytes         ( void ) const;
   U64  TotalNodeCountByStats ( void ) const;
   void CalculateLogicallyDenseArrStats ( void );
   void CalculateHybridArrStats         ( void );
   void CalculateCompressedArrStats     ( void );
   void WriteComparitiveStatisticsToFile( FILE * FH ) const;
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#endif
